package datosFamilias;

import java.util.ArrayList;
import java.util.Hashtable;

public class Familia extends FamiliaAbstracta
{
    private ArrayList<Persona> integrantes;
    private Hashtable<Integer, ArrayList<Float>> puntajesTecnicas;
    
    
    public Familia(String dir, Persona per)
    {
        direccion = dir;
        integrantes = new ArrayList<Persona>();
        integrantes.add(per);
        puntajesTecnicas = new Hashtable<Integer, ArrayList<Float>>();
    }
    
    public void agregarIntegrante(Persona p)
    {
        if(!existeIntegrante(p))
            integrantes.add(p);
    }
    
    public boolean existeIntegrante(Persona p)
    {
        return integrantes.contains(p);
    }
    
    public boolean existeIntegrante(int id)
    {
        for(int index = 0; index < integrantes.size(); index++)
        {
            if(integrantes.get(index).obtenerID() == id)
            {
                return true;
            }
        }
        return false;
    }
    
    public Persona obtenerIntegrante(int id)
    {
        for(int index = 0; index < integrantes.size(); index++)
        {
            if(integrantes.get(index).obtenerID() == id)
            {
                return integrantes.get(index);
            }
        }
        return null;
    }   
    
    public Persona obtenerTitular(Persona p)
    {
        return integrantes.get(0);
    }  
    
    public ArrayList<Persona> obtenerIntegrantes()
    {
        return integrantes;
    }
    
    public boolean equals(Familia f)
    {
        return direccion == f.obtenerDireccion();
    }

    public void agregarPuntaje(int tecnica, int criterio, float valor)
    {
        if(puntajesTecnicas.containsKey(tecnica))
        {
            (puntajesTecnicas.get(tecnica)).add(criterio, valor);
        }
        else
        {
            ArrayList<Float> puntajes = new ArrayList<Float>();
            puntajes.add(criterio, valor);
            puntajesTecnicas.put(tecnica, puntajes);
        }    
        
    }
    
    public float obtenerPuntaje(int tecnica, int criterio)
    {
        return (puntajesTecnicas.get(tecnica)).get(criterio);
    }
    
    @Override
    public int calcularPuntajes(int criterio) {
        int total = 0;
        for(int index = 0; index < integrantes.size(); index++)
        {
            total += (integrantes.get(index)).calcularPuntajes(criterio);
        }
        return total;
    }
}
